1
תגובות

שאלה לגבי OOP ומסדי נתונים

פתח niv ,
היי,
אני לומד כרגע OOP ונתקל בשאלה. אני מנסה ליצור מערכת לרשימת מלאי של בגדים.
בסופו של דבר- הנתונים אמורים להכנס למסד נתונים. מה נותן לי ליצור מחלקה? הרי נניח שיצרתי מחלקה שנקראת Tshirt, יצרתי משהו כזה:
class Tshirt {
    private $brand;
    private $size;
    private $color;
   
    public function __construct($brandVal, $sizeVal, $colorVal) {
        $this->brand = $brandVal;
        $this->size =   $sizeVal;
        $this->color    = $colorVal;
    }
   
    public function __toString() {
        return "The brand is: ". $this->brand."<Br /> the size: ".$this->size ."<br /> the color: ".$this->color;
    }


}
$a  =   new Tshirt("TNT","L","Blue");

מה זה נותן לי? איך אני מכניס את זה למסד נתונים? לא יותר חכם ליצור מחלקה שמכניסה למסד נתונים ופשוט להכניס את הנתונים למסד? מה השיטה המקובלת?
הרי אם אני עובד מול מסד נתונים, למה לי ליצור אובייקט מהקלאס Tshirt אם מה שמעניין אותי זה בסופו של דבר המסד נתונים?

1 תשובות

avatar ענה Splash ב 16 לאוגוסט 2015 #

מה עוזר לך להפריד את הקוד לקבצים ? סדר ומודולריות.
אתה רוצה שיהיה מבנה מסויים לקוד ולא שכל דבר יהיה זרוק איפה שהוא ואחר כך שתרצה לשנות להתחיל להסתבך.

הפונקציה toString מיותרת לגמרי. אתה סתם פולט פה מידע ודואג שהקוד יהיה מסורבל. אין שום סיבה שיהיה טקסט בתוך מחלקה כזאת התפקיד שלה הוא להחזיר נתונים בלבד .זה יכול להיות מערך ,json ,אוביקט - וואטאבר אבל בשום פנים ואופן לא טקסט.

לגבי המבנה של המחלקה מדובר בנושא מורכב ואני לא מכיר אישית שום מדריך שבאמת מסביר כמו שצריך על הנושא.
אני ממליץ לך לחפש ספר שמסביר על כל העניין ,אני לא בטוח אם הספר של אלכס [הספר המפורסם פה באתר] מכיל את המידע הנ"ל ולכן תצטרך לחכות שהוא יגיב פה או לחפש ספר טוב באנגלית.

על רגל אחת - המחלקה הזאת אמורה לתקשר עם מחלקה שמקשרת למסד נתונים וע"י יצירת ממשק למחלקה אתה יכול לבצע פעולות כמו שמירה,עדכון,חיפוש,יצירה וכו' בלי להסתבך בכלל כך שאחרי שבנית את המחלקה שמתקשרת עם המסד אתה צריך להעביר לה נתונים בסיסיים.

אם נקח לדוגמא את הפריימוורק Laravel אתה תוכל לראות שהקוד שממש את המודל הוא נורא פשוט - אתה בסך הכל מכניס את השם של הטבלה ואת המפתח ראשי שלה ובעצם נורא מפשט לעצמך את העבודה מול המסד. כמובן שהשכבה מעל הייתה מאוד מורכבת לכתיבה אבל הייתה צריך לכתוב אותה פעם אחת וזהו - אתה יכול להשתמש באותה מחלקה בכל פרויקט שתבנה בעתיד.
אגב אם אתה לא רוצה להסתבך עם הנושא הזה כרגע אתה יכול להשתמש ב eloquent של laravel גם בלי להשתמש בכל הפריימוורק.